{% extends layout %} {% from "components/macros/layout.html" import sidebar_icon, theme_toggle %} {% from "components/macros/icons.html" import icon %} {# The viewer's menu: the appearance, the sidebar's grouping and, for a signed-in viewer (without auth nobody signs in, and there is no /logout), Sign out. The sidebar's foot and the phone header draw it. #} {% macro viewer_menu(placement="down", rail=False) -%} {% call theme_toggle(placement, rail=rail, label=user.email if user else "Appearance", more=[grouping_choice(request)]) %} {% if user %}
Sign out
{% endif %} {% endcall %} {%- endmacro %} {# One sidebar link, in either grouping: a component's or service's with its live status dot, current when the page's ``item`` is its page; one of Overseer's own pages by its group alone. #} {% macro nav_link(entry) -%} {% set health = entry.group in ("components", "services") %} {{ sidebar_icon(entry.name) }} {{ entry.title }} {% if health %} {% set health_status = entry.status %}{% include "pages/overseer/_status_dot.html" %} {% endif %} {%- endmacro %} {% block app_content %}
{# Everything right of the main sidebar. A page's sub-menu and content swap together as this one element, so the sidebar never re-renders (and keeps its scroll); app.js moves its current mark. #}
{% block overseer_subnav %}{% endblock %}
{{ viewer_menu() }}
{# A document (Overview, Settings) keeps a reading column; a workspace (Logs, Deployments, the Map), where the data is the page, runs to the gutters. A page says which in ``overseer_width``. #}
{% block overseer_content %}{% endblock %}
{% if chat_path is defined %}{% include "components/chat_drawer.html" %}{% endif %} {% endblock %}